package class_03;
/**
 * 找到index小的内容
 * @author LOGAN
 * 问题描述：定义局部最小的概念。arr长度为1时，arr[0]是局部最小。arr的长度为N(N>1)时，如果arr[0]<arr[1]，那么arr[0]是局部最小；如果arr[N-1]<arr[N-2]，那么arr[N-1]是局部最小；如果0<i<N-1，既有arr[i]<arr[i-1]，又有arr[i]<arr[i+1]，那么arr[i]是局部最小。
 *	    	给定无序数组arr，已知arr中任意两个相邻的数都不相等。写一个函数，只需返回arr中任意一个局部最小出现的位置即可。
 * 选出一个即可：
原文链接：https://blog.csdn.net/qq_38238041/article/details/79250276
 */
public class Code_15_FindOneLessValueIndex {

	/**
	 * 找到比index小的，value值
	 * @param arr
	 * @return
	 */
	public static int getLessIndex(int[] arr) {
		//考虑越界行为：如果是null  或者是length为0
		if (arr == null || arr.length == 0) {
			return -1; // no exist
		}
		//如果length为1   或者   arr[0]<arr[1] 这种情况  
		if (arr.length == 1 || arr[0] < arr[1]) {
			return 0;
		}
		//如果{...6,4} 如果6和4为最后
		if (arr[arr.length - 1] < arr[arr.length - 2]) {
			return arr.length - 1;
		}
		//范围[1,arr.length-2]这之中的值
		int left = 1;
		int right = arr.length - 2;
		int mid = 0;
		//当做小于右的情况下
		while (left < right) {
			mid = (left + right) / 2;
			if (arr[mid] > arr[mid - 1]) {
				right = mid - 1;
			} else if (arr[mid] > arr[mid + 1]) {
				left = mid + 1;
			} else {
				return mid;
			}
		}
		return left;
	}

	public static void printArray(int[] arr) {
		for (int i = 0; i != arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		int[] arr = { 6, 5, 3, 4, 7, 6, 8 };
		printArray(arr);
		int index = getLessIndex(arr);
		System.out.println("index: " + index + ", value: " + arr[index]);

	}

}
